package com.pan.games.array;

import java.util.Arrays;

/**
 * 对于一个给定数组的基本操作
 * @author by panstark
 * @description
 * @notice
 * @date 2020/12/22
 */

public class BasicArrayPlayer {

    private static int[] arr = {4,3,6,7,8,9,4,2,11,23,56,43,45};

    /**
     * 复制后的数组，已经不再是原来的数组，是一个新开辟的空间
     * @param arr
     * @return
     */
    //复制一个array
    public static int[] copyArray(int[] arr){

        if(arr==null||arr.length==0){
            return arr;
        }
        int[] ints = Arrays.copyOf(arr, arr.length);
        return ints;
    }


    /**
     * 交换两个元素
     * @param arr
     * @param index
     * @param nextIndex
     * @return
     */
    public static void swapEle(int[] arr,int index,int nextIndex){
        int temp = arr[index];
        arr[index] = arr[nextIndex];
        arr[nextIndex] = temp;
    }


    /**
     *
     * 将一个数组的指定位置添加一个元素
     * @param arr
     * @param ele
     * @param index
     * @return
     */
    public static int[] putOneEle(int[] arr,int ele, int index){
        int length = arr.length;
        if(index<0||index>length-1){
            throw new RuntimeException(String.format("指定位置超越数组边界，数组边界为[0,%s]",length));
        }
        int[] ints = Arrays.copyOf(arr, length + 1);
        for(int i=length-1;i>=index;i--){
            ints[i+1]=ints[i];
        }
        ints[index] = ele;
        return ints;
    }


    /**
     * 在数组中添加一个新元素
     * 对于一个静态数组不能扩容，扩容之后就是另一个数组了
     * @param arr
     * @param ele
     * @param index
     */
    public static  void replaceOneEle(int[] arr,int ele, int index){
        int length = arr.length;
        if(index<0||index>length-1){
            throw new RuntimeException(String.format("指定位置超越数组边界，数组边界为[0,%s]",length));
        }
        for(int i=length-1;i>index;i--){
            arr[i]=arr[i-1];
        }
        arr[index] = ele;
    }


    public static void main(String[] args) {

        //时刻注意arr指向的是哪一个对象
        int[] arr = BasicArrayPlayer.arr;

        int[] ints = putOneEle(arr, 99, 3);
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(ints));

        replaceOneEle(arr,88,3);
        System.out.println(Arrays.toString(arr));

    }

}

